import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEAction } from '../action/ipsdeaction';
import { IPSDEMainStateAction } from './ipsdemain-state-action';
import { IPSDEMainStateField } from './ipsdemain-state-field';
import { IPSDEMainStateOPPriv } from './ipsdemain-state-oppriv';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEMainState
 */
export interface IPSDEMainState extends IPSDataEntityObject {
  /**
   * 行为拒绝消息
   * @type {string}
   */
  actionDenyMsg: string;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 进入实体行为
   *
   * @type {IPSDEAction}
   */
  getEnterPSDEAction(): IPSDEAction | null;

  /**
   * 进入实体行为
   *
   * @type {IPSDEAction}
   */
  get enterPSDEAction(): IPSDEAction | null;

  /**
   * 进入实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getEnterPSDEActionMust(): IPSDEAction;

  /**
   * 进入状态模式
   * @description 值模式 [进入状态模式] {ANY：任意、 SOME：指定 }
   * @type {( string | 'ANY' | 'SOME')}
   */
  enterStateMode: string | 'ANY' | 'SOME';

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 主状态标记
   * @type {string}
   */
  mSTag: string;

  /**
   * 操作标识拒绝消息
   * @type {string}
   */
  oPPrivDenyMsg: string;

  /**
   * 排序值
   * @type {number}
   * @default 99999
   */
  orderValue: number;

  /**
   * 主状态控制行为集合
   *
   * @type {IPSDEMainStateAction[]}
   */
  getPSDEMainStateActions(): IPSDEMainStateAction[] | null;

  /**
   * 主状态控制行为集合
   *
   * @type {IPSDEMainStateAction[]}
   */
  get psDEMainStateActions(): IPSDEMainStateAction[] | null;

  findPSDEMainStateAction(objKey: any): IPSDEMainStateAction | null;

  /**
   * 主状态控制属性集合
   *
   * @type {IPSDEMainStateField[]}
   */
  getPSDEMainStateFields(): IPSDEMainStateField[] | null;

  /**
   * 主状态控制属性集合
   *
   * @type {IPSDEMainStateField[]}
   */
  get psDEMainStateFields(): IPSDEMainStateField[] | null;

  findPSDEMainStateField(objKey: any): IPSDEMainStateField | null;

  /**
   * 主状态控制操作标识集合
   *
   * @type {IPSDEMainStateOPPriv[]}
   */
  getPSDEMainStateOPPrivs(): IPSDEMainStateOPPriv[] | null;

  /**
   * 主状态控制操作标识集合
   *
   * @type {IPSDEMainStateOPPriv[]}
   */
  get psDEMainStateOPPrivs(): IPSDEMainStateOPPriv[] | null;

  findPSDEMainStateOPPriv(objKey: any): IPSDEMainStateOPPriv | null;

  /**
   * 前序状态集合
   *
   * @type {IPSDEMainState[]}
   */
  getPrevPSDEMainStates(): IPSDEMainState[] | null;

  /**
   * 前序状态集合
   *
   * @type {IPSDEMainState[]}
   */
  get prevPSDEMainStates(): IPSDEMainState[] | null;

  findPrevPSDEMainState(objKey: any): IPSDEMainState | null;

  /**
   * 状态2值
   * @type {string}
   */
  state2Value: string;

  /**
   * 状态3值
   * @type {string}
   */
  state3Value: string;

  /**
   * 状态值
   * @type {string}
   */
  stateValue: string;

  /**
   * 视图操作控制
   * @description 值模式 [实体视图操作控制] {1：支持建立、 2：支持编辑、 4：支持查看、 8：支持删除、 16：支持拷贝、 32：支持行编辑、 64：支持导出、 1024：支持导入、 128：支持打印、 256：支持过滤、 512：支持帮助、 2048：支持启动流程 }
   * @type {( number | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 1024 | 128 | 256 | 512 | 2048)}
   */
  viewActions: number | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 1024 | 128 | 256 | 512 | 2048;

  /**
   * 流程状态模式
   * @description 值模式 [实体主状态流程状态] {0：无、 1：流程中、 2：流程正常结束、 3：流程异常退出 }
   * @type {( number | 0 | 1 | 2 | 3)}
   */
  wFStateMode: number | 0 | 1 | 2 | 3;

  /**
   * 行为允许模式
   * @type {boolean}
   */
  actionAllowMode: boolean;

  /**
   * 默认主状态
   * @type {boolean}
   */
  default: boolean;

  /**
   * 启用视图操作控制
   * @type {boolean}
   */
  enableViewActions: boolean;

  /**
   * 属性允许模式
   * @type {boolean}
   */
  fieldAllowMode: boolean;

  /**
   * 操作标识允许模式
   * @type {boolean}
   */
  oPPrivAllowMode: boolean;
}
